﻿using System;
using System.Windows.Forms;
using ProyectoActivos.Daos;
using ProyectoActivos.Validate;
using EntitiesAndMappings.Entities;
using ProyectoActivos.Util;
using System.Collections.Generic;

namespace ProyectoActivos.Forms.Operaciones
{
    public partial class FrmSalida : Form, IValidateForm
    {
        public static FrmSalida Activo { set; get; }
        private Boolean _valido;
        private SalidaDAO salidaDAO;        


        public FrmSalida()
        {
            InitializeComponent();
            if (Activo == null)
            {
                Activo = this;
            }
            _valido = true;
            salidaDAO = new SalidaDAO();
            Closed += EnCierre;
            dGridResultado.AutoGenerateColumns = false;
        }

        private void EnCierre(object sender, EventArgs e)
        {
            Activo = null;
        }

        private void FrmSalida_Load(object sender, EventArgs e)
        {
            _valido = true;

            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 1, Descripcion = "Enero" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 2, Descripcion = "Febrero" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 3, Descripcion = "Marzo" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 4, Descripcion = "Abril" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 5, Descripcion = "Mayo" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 6, Descripcion = "Junio" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 7, Descripcion = "Julio" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 8, Descripcion = "Agosto" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 9, Descripcion = "Septiembre" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 10, Descripcion = "Octubre" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 11, Descripcion = "Noviembre" });
            cmbMes.Items.Add(new ItemGenericoComboBox() { Id = 12, Descripcion = "Diciembre" });
            cmbMes.SelectedItem = null;

          
            ActionExecutor.Execute(this, delegate
            {
                var tipoMovimientoDAO = new TipoMovimientoDAO();
                cmbTipoMovimiento.DataSource = FormUtils.AddFirst(tipoMovimientoDAO.ListarTodos(), new TipoMovimiento{ Codigo = "", Descripcion = "Todos" });

                var almacenDAO = new AlmacenDAO();
                cmbAlmacen.DataSource = FormUtils.AddFirst(almacenDAO.ListarTodos(), new Almacen{ Codigo = " - Todos", Nombre = "" });


            });
        }

        public void Invalid()
        {
            _valido = false;
        }

        public Boolean IsValid()
        {
            return _valido;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            _valido = true;
            errorProvider.Clear();
           

            txtAnho.Text = txtAnho.Text.Trim();
            txtNroGuia.Text = txtNroGuia.Text.Trim();
            
            if (!String.IsNullOrEmpty(txtAnho.Text))
            {
              FormsAssert.AssertTextBoxOnlyNumbers(txtAnho, errorProvider, this);
              FormsAssert.AssertComboBoxSelected(cmbMes, errorProvider, this);
            }

           if (cmbMes.SelectedItem != null)
           {
               FormsAssert.AssertTextBoxNotEmptyAndSize(txtAnho, 4, errorProvider, this);
               FormsAssert.AssertTextBoxOnlyNumbers(txtAnho, errorProvider, this);
        
            } 
           


            var salida = new Salida
            {
                Almacen = (Almacen)cmbAlmacen.SelectedItem,
                TipoMovimiento = (TipoMovimiento)cmbTipoMovimiento.SelectedItem,
                NumeroGuia = txtNroGuia.Text                
            };

            if (!String.IsNullOrEmpty(txtAnho.Text) && cmbMes.SelectedItem != null)
            {
                salida.Fecha = new DateTime(int.Parse(txtAnho.Text), ((ItemGenericoComboBox)cmbMes.SelectedItem).Id, 1);
            }


            ActionExecutor.Execute(this, delegate
            {
                var salidaDAO = new SalidaDAO();
                dGridResultado.DataSource = salidaDAO.Buscar(salida);
            });
        }

        private void tStripButtonCrear_Click(object sender, EventArgs e)
        {
            var form = new FrmEditarSalida(new Salida());
            form.ShowDialog(this);
            if (!form.CerroSinAccion)
            {
                btnBuscar_Click(sender, e);
            }
        }

        private void toolStripModificar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.SelectedRows.Count > 0)
            {

                var salida = (Salida)dGridResultado.CurrentRow.DataBoundItem;
                var form = new FrmEditarSalida(salidaDAO.Refresh(salida));
                form.ShowDialog(this);
                if (!form.CerroSinAccion)
                {
                    btnBuscar_Click(sender, e);
                }
            }
            else
            {
                MessageBox.Show(@"Debe seleccionar un elemento");
            }
        }

        private void tStripButtonEliminar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var salida = (Salida)dGridResultado.CurrentRow.DataBoundItem;
            salidaDAO.Delete(salida);
            btnBuscar_Click(sender, e);
        }
    }
}
